package models

import "time"

// NavigationItem 导航项目
type NavigationItem struct {
	Name        string `json:"name"`
	URL         string `json:"url"`
	Description string `json:"description"`
	Icon        string `json:"icon"`
}

// Category 分类
type Category struct {
	ID    string           `json:"id"`
	Name  string           `json:"name"`
	Icon  string           `json:"icon"`
	Color string           `json:"color"`
	Items []NavigationItem `json:"items"`
}

// Settings 设置
type Settings struct {
	Theme            string `json:"theme"`
	Layout           string `json:"layout"`
	ShowDescriptions bool   `json:"showDescriptions"`
	EnableSearch     bool   `json:"enableSearch"`
	EnableFavorites  bool   `json:"enableFavorites"`
}

// NavigationData 导航数据
type NavigationData struct {
	Categories   []Category `json:"categories"`
	Settings     Settings   `json:"settings"`
	Favorites    []string   `json:"favorites"`
	RecentlyUsed []string   `json:"recentlyUsed"`
}

// Bookmark 书签结构
type Bookmark struct {
	ID        string `json:"id"`
	Title     string `json:"title"`
	URL       string `json:"url"`
	DateAdded string `json:"dateAdded"`
	ParentID  string `json:"parentId"`
}

// BrowsingHistory 浏览历史记录
type BrowsingHistory struct {
	URL       string `json:"url"`
	Title     string `json:"title"`
	VisitTime string `json:"visitTime"`
	Domain    string `json:"domain"`
	Path      string `json:"path"`
}

// BrowsingStats 浏览统计
type BrowsingStats struct {
	TotalVisits     int    `json:"totalVisits"`
	MostVisitedSite string `json:"mostVisitedSite"`
	TodayVisits     int    `json:"todayVisits"`
	FavoriteDomain  string `json:"favoriteDomain"`
	UniqueSites     int    `json:"uniqueSites"`
}

// BrowsingRecord 浏览记录（用于展示）
type BrowsingRecord struct {
	URL           string    `json:"url"`
	Title         string    `json:"title"`
	Domain        string    `json:"domain"`
	Path          string    `json:"path"`
	VisitCount    int       `json:"visitCount"`
	FirstVisit    time.Time `json:"firstVisit"`
	LastVisit     time.Time `json:"lastVisit"`
	LastVisitTime string    `json:"lastVisitTime"`
}

// APIResponse 统一API响应格式
type APIResponse struct {
	Code    int         `json:"code"`
	Message string      `json:"message"`
	Data    interface{} `json:"data"`
}

// AI分组相关数据模型

// AIGroupingVersion AI分组版本
type AIGroupingVersion struct {
	ID          string           `json:"id"`
	Name        string           `json:"name"`
	Description string           `json:"description"`
	CreatedAt   time.Time        `json:"createdAt"`
	UpdatedAt   time.Time        `json:"updatedAt"`
	CompletedAt *time.Time       `json:"completedAt,omitempty"`
	Status      string           `json:"status"` // pending, processing, completed, failed
	TotalURLs   int              `json:"totalUrls"`
	GroupedURLs int              `json:"groupedUrls"`
	Config      AIGroupingConfig `json:"config"`
}

// AIGroupingConfig AI分组配置
type AIGroupingConfig struct {
	AlgorithmType       string                 `json:"algorithmType"` // frequency, time_pattern, content_similarity, ai_enhanced
	Parameters          map[string]interface{} `json:"parameters"`
	UserPrompt          string                 `json:"userPrompt"`
	MinGroupSize        int                    `json:"minGroupSize"`
	MaxGroupSize        int                    `json:"maxGroupSize"`
	SimilarityThreshold float64                `json:"similarityThreshold"`
}

// AIGroup AI分组
type AIGroup struct {
	ID          string    `json:"id"`
	VersionID   string    `json:"versionId"`
	Name        string    `json:"name"`
	Description string    `json:"description"`
	Color       string    `json:"color"`
	Icon        string    `json:"icon"`
	Order       int       `json:"order"`
	CreatedAt   time.Time `json:"createdAt"`
	UpdatedAt   time.Time `json:"updatedAt"`
	URLs        []string  `json:"urls"`
	URLCount    int       `json:"urlCount"`
	Confidence  float64   `json:"confidence"` // 分组置信度 0-1
}

// URLGroupAssignment URL分组分配
type URLGroupAssignment struct {
	ID         string    `json:"id"`
	URL        string    `json:"url"`
	Title      string    `json:"title"`
	Domain     string    `json:"domain"`
	Path       string    `json:"path"`
	VisitCount int       `json:"visitCount"`
	LastVisit  time.Time `json:"lastVisit"`
	GroupID    string    `json:"groupId"`
	VersionID  string    `json:"versionId"`
	Confidence float64   `json:"confidence"`
	Reason     string    `json:"reason"` // 分组原因
	CreatedAt  time.Time `json:"createdAt"`
	UpdatedAt  time.Time `json:"updatedAt"`
}

// GroupingTask 分组任务
type GroupingTask struct {
	ID          string         `json:"id"`
	VersionID   string         `json:"versionId"`
	Status      string         `json:"status"`   // pending, processing, completed, failed
	Progress    int            `json:"progress"` // 0-100
	Message     string         `json:"message"`  // 状态消息
	StartedAt   time.Time      `json:"startedAt"`
	CompletedAt *time.Time     `json:"completedAt,omitempty"`
	CreatedAt   time.Time      `json:"createdAt"`
	UpdatedAt   time.Time      `json:"updatedAt"`
	Error       string         `json:"error,omitempty"`
	Result      GroupingResult `json:"result,omitempty"`
}

// AIGroupingTask AI分组任务（别名）
type AIGroupingTask = GroupingTask

// GroupingResult 分组结果
type GroupingResult struct {
	Groups     []AIGroup          `json:"groups"`
	Unassigned []string           `json:"unassigned"` // 未分组的URL
	Statistics GroupingStatistics `json:"statistics"`
}

// GroupingStatistics 分组统计
type GroupingStatistics struct {
	TotalURLs      int     `json:"totalUrls"`
	GroupedURLs    int     `json:"groupedUrls"`
	UnassignedURLs int     `json:"unassignedUrls"`
	GroupCount     int     `json:"groupCount"`
	AvgConfidence  float64 `json:"avgConfidence"`
	ProcessingTime int64   `json:"processingTime"` // 毫秒
}

// URLFeature URL特征
type URLFeature struct {
	URL          string             `json:"url"`
	Title        string             `json:"title"`
	Domain       string             `json:"domain"`
	Path         string             `json:"path"`
	VisitCount   int                `json:"visitCount"`
	FirstVisit   time.Time          `json:"firstVisit"`
	LastVisit    time.Time          `json:"lastVisit"`
	VisitPattern []int              `json:"visitPattern"` // 按小时统计的访问模式
	Keywords     []string           `json:"keywords"`     // 提取的关键词
	Category     string             `json:"category"`     // 预测的类别
	Similarity   map[string]float64 `json:"similarity"`   // 与其他URL的相似度
}

// GroupingAlgorithm 分组算法接口
type GroupingAlgorithm interface {
	GroupURLs(features []URLFeature, config AIGroupingConfig) ([]AIGroup, error)
	GetName() string
	GetDescription() string
}

// FrequencyGroupingAlgorithm 频率分组算法
type FrequencyGroupingAlgorithm struct{}

// TimePatternGroupingAlgorithm 时间模式分组算法
type TimePatternGroupingAlgorithm struct{}

// ContentSimilarityGroupingAlgorithm 内容相似性分组算法
type ContentSimilarityGroupingAlgorithm struct{}

// AIEnhancedGroupingAlgorithm AI增强分组算法
type AIEnhancedGroupingAlgorithm struct{}
